home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2001 May / SGI IRIX Base Documentation 2001 May.iso / usr / share / catman / p_man / cat3 / standard / sigfpe.z / sigfpe
Encoding:
Text File  |  1998-10-30  |  45.4 KB  |  1,314 lines

  1.  
  2.  
  3.  
  4. SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))                                                          SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      handle_sigfpes - floating-point exception handler package
  10.  
  11. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  12.      ####iiiinnnncccclllluuuuddddeeee <<<<ssssiiiiggggffffppppeeee....hhhh>>>>
  13.  
  14.      vvvvooooiiiidddd hhhhaaaannnnddddlllleeee____ssssiiiiggggffffppppeeeessss ((((iiiinnnntttt oooonnnnooooffffffff,,,, iiiinnnntttt eeeennnn____mmmmaaaasssskkkk,,,,
  15.                           vvvvooooiiiidddd ((((****uuuusssseeeerrrr____rrrroooouuuuttttiiiinnnneeee))))((((uuuunnnnssssiiiiggggnnnneeeedddd[[[[5555]]]],,,, iiiinnnntttt[[[[2222]]]])))),,,,
  16.                           iiiinnnntttt aaaabbbboooorrrrtttt____aaaaccccttttiiiioooonnnn,,,,
  17.                           vvvvooooiiiidddd ((((****aaaabbbboooorrrrtttt____rrrroooouuuuttttiiiinnnneeee))))((((uuuunnnnssssiiiiggggnnnneeeedddd iiiinnnntttt ********))))))));;;;
  18.  
  19.      ttttyyyyppppeeeeddddeeeeffff vvvvooooiiiidddd ((((****uuuusssseeeerrrr____tttt))))((((uuuunnnnssssiiiiggggnnnneeeedddd[[[[5555]]]],,,, iiiinnnntttt[[[[2222]]]]))));;;;
  20.  
  21.      ttttyyyyppppeeeeddddeeeeffff vvvvooooiiiidddd ((((****aaaabbbboooorrrrtttt____tttt))))((((uuuunnnnssssiiiiggggnnnneeeedddd iiiinnnntttt ********))));;;;
  22.  
  23.      ssssttttrrrruuuucccctttt ssssiiiiggggffffppppeeee____tttteeeemmmmppppllllaaaatttteeee
  24.           {{{{
  25.           iiiinnnntttt rrrreeeeppppllllssss;;;;
  26.           iiiinnnntttt ccccoooouuuunnnntttt;;;;
  27.           iiiinnnntttt ttttrrrraaaacccceeee;;;;
  28.           iiiinnnntttt aaaabbbboooorrrrtttt;;;;
  29.           iiiinnnntttt eeeexxxxiiiitttt;;;;
  30.           }}}};;;;
  31.  
  32.      eeeexxxxtttteeeerrrrnnnn ssssttttrrrruuuucccctttt ssssiiiiggggffffppppeeee____tttteeeemmmmppppllllaaaatttteeee ssssiiiiggggffffppppeeee____[[[[____NNNN____EEEEXXXXCCCCEEEEPPPPTTTTIIIIOOOONNNN____TTTTYYYYPPPPEEEESSSS++++1111]]]];;;;
  33.  
  34.      eeeexxxxtttteeeerrrrnnnn iiiinnnntttt iiiinnnnvvvvaaaalllliiiiddddoooopppp____rrrreeeessssuuuullllttttssss____[[[[____NNNN____IIIINNNNVVVVAAAALLLLIIIIDDDDOOOOPPPP____RRRREEEESSSSUUUULLLLTTTTSSSS++++1111]]]];;;;
  35.  
  36.      eeeexxxxtttteeeerrrrnnnn iiiinnnntttt iiiinnnnvvvvaaaalllliiiiddddoooopppp____ooooppppeeeerrrraaaannnnddddssss____[[[[____NNNN____IIIINNNNVVVVAAAALLLLIIIIDDDDOOOOPPPP____OOOOPPPPEEEERRRRAAAANNNNDDDDSSSS++++1111]]]];;;;
  37.  
  38. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  39.      The floating-point accelerator may raise floating-point exceptions,
  40.      signal SIGFPE, due to five conditions:  ____OOOOVVVVEEEERRRRFFFFLLLL(_o_v_e_r_f_l_o_w),
  41.      ____UUUUNNNNDDDDEEEERRRRFFFFLLLL(_u_n_d_e_r_f_l_o_w), ____DDDDIIIIVVVVZZZZEEEERRRROOOO(_d_i_v_i_d_e-_b_y-_z_e_r_o), ____IIIINNNNEEEEXXXXAAAACCCCTTTT(_i_n_e_x_a_c_t _r_e_s_u_l_t),
  42.      or ____IIIINNNNVVVVAAAALLLLIIIIDDDD(_i_n_v_a_l_i_d _o_p_e_r_a_n_d, e.g., infinity). Usually these conditions
  43.      are masked, and do not cause a floating-point exception. Instead, a
  44.      default value is substituted for the result of the operation, and the
  45.      program continues silently. This event may be intercepted by causing an
  46.      exception to be raised.  When this occurs, the operating system generates
  47.      a SIGFPE signal.
  48.  
  49.      The integer arithmetic instructions add, addi, dadd, daddi, sub, and dsub
  50.      also generate a SIGFPE signal when the result of the operation overflows
  51.      (condition _INT_OVERFL).  (At the moment, SGI compilers generate only
  52.      unsigned versions of these instructions, which do not generate a signal
  53.      on overflow.  However it is still possible to generate these instructions
  54.      via assembly language).
  55.  
  56.      For ----oooo33332222 programs, the compiler generates additional instructions to
  57.      detect and trap on integer-divide-by-zero.  No similar detection code
  58.      sequences are generated in ----nnnn33332222 or ----66664444 programs.
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))                                                          SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))
  71.  
  72.  
  73.  
  74.      Once an exception is raised, the specific conditions which caused the
  75.      exception may be determined, and more appropriate action taken.
  76.  
  77.      The library lllliiiibbbbffffppppeeee....ssssoooo provides two methods to unmask and handle these
  78.      conditions: the subroutine hhhhaaaannnnddddlllleeee____ssssiiiiggggffffppppeeeessss, and the environment variable
  79.      TTTTRRRRAAAAPPPP____FFFFPPPPEEEE.  Both methods provide a mechanism for unmasking each of these
  80.      conditions except ____IIIINNNNEEEEXXXXAAAACCCCTTTT, for _h_a_n_d_l_i_n_g and classifying exceptions
  81.      arising from them, and for substituting either a default value or a
  82.      chosen one.  They also provide mechanisms to count, trace, exit or abort
  83.      on enabled exceptions.  If the user supplies his own call to
  84.      hhhhaaaannnnddddlllleeee____ssssiiiiggggffffppppeeeessss he should leave environment variable TTTTRRRRAAAAPPPP____FFFFPPPPEEEE undefined or
  85.      set to OFF.  TTTTRRRRAAAAPPPP____FFFFPPPPEEEE is supported for Fortran, C, C++ and Pascal.
  86.      HHHHaaaannnnddddlllleeee____ssssiiiiggggffffppppeeeessss is supported for C, C++ and Fortran.
  87.  
  88.      Calling the subroutine is the preferred method when preparing software
  89.      for others to use, since it relieves the user of any need to know about
  90.      the TTTTRRRRAAAAPPPP____FFFFPPPPEEEE environment variable.
  91.  
  92.      The environment variable is preferable if one wants to experiment or
  93.      allow any user to experiment with different trap behaviors with minimum
  94.      effort.
  95.  
  96.      Libfpe uses System V signal handling and will not work with programs
  97.      which use Berkeley signal handling.
  98.  
  99.      Note that the preferred method for flushing denormals to zero is to set
  100.      the FS bit to 1 in the floating point control status register.  The
  101.      following routine (written in c) can be used to set/clear the FS bit.
  102.  
  103.           #include <sys/fpu.h>
  104.  
  105.           void
  106.           flush_to_zero(int on_off)
  107.           {
  108.           union fpc_csr  n;
  109.  
  110.                n.fc_word = get_fpc_csr();
  111.                if ( on_off == 0 ) {
  112.                     n.fc_struct.flush = 0;
  113.                } else {
  114.                     n.fc_struct.flush = 1;
  115.                }
  116.                set_fpc_csr(n.fc_word);
  117.           }
  118.  
  119.      Note that if the FS bit in the floating point control status register is
  120.      set, it remains set after calling handle_sigfpes(_OFF, ...
  121.  
  122.      Be sure to read the section NOTES FOR R8000, below, which describes the
  123.      behavior of libfpe.so on the R8000 processor.
  124.  
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))                                                          SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))
  137.  
  138.  
  139.  
  140. HHHHAAAANNNNDDDDLLLLEEEE____SSSSIIIIGGGGFFFFPPPPEEEESSSS SSSSUUUUBBBBRRRROOOOUUUUTTTTIIIINNNNEEEE
  141.      The values in the global arrays are described in the section WWWWHHHHEEEENNNN AAAANNNN
  142.      EEEEXXXXCCCCEEEEPPPPTTTTIIIIOOOONNNN IIIISSSS EEEENNNNCCCCOOOOUUUUNNNNTTTTEEEERRRREEEEDDDD later in this man page.
  143.  
  144.      The arguments to _h_a_n_d_l_e__s_i_g_f_p_e_s are as follows:
  145.  
  146.      _o_n_o_f_f is a flag indicating whether handling is being turned on (_o_n_o_f_f ==
  147.      __O_N) or off (_o_n_o_f_f == __O_F_F). (_o_n_o_f_f == __D_E_B_U_G) is another way to turn on
  148.      handling.  Information from the sigfpe structure will be printed if
  149.      (_o_n_o_f_f == __D_E_B_U_G).  (all the names used in this document are defined in
  150.      _s_i_g_f_p_e._h).
  151.  
  152.      _e_n__m_a_s_k indicates which of the five conditions should be unmasked,
  153.      enabling them to raise floating-point exceptions/or an integer overflow
  154.      exception.  _e_n__m_a_s_k is only valid if onoff == _ON  or onoff == _DEBUG,
  155.      and is the bitwise or of one or more of the constants _EN_UNDERFL,
  156.      _EN_OVERFL, _EN_DIVZERO, _EN_INVALID, and _EN_INT_OVERFL (defined in
  157.      _s_i_g_f_p_e._h).
  158.  
  159.      _u_s_e_r__r_o_u_t_i_n_e: hhhhaaaannnnddddlllleeee____ssssiiiiggggffffppppeeeessss provides a mechanism for setting the result
  160.      of the operation to any one of a set of well-known values.  If full
  161.      control over the value of selected operations is desired for one or more
  162.      exception conditions, a function _u_s_e_r__r_o_u_t_i_n_e must be provided.  For
  163.      these selected exception conditions, _u_s_e_r__r_o_u_t_i_n_e will be called to set
  164.      the value resulting from the operation.  Pass a 0 (plain 0 is adequate)
  165.      if you do not wish to provide a _u_s_e_r__r_o_u_t_i_n_e. Typedef uuuusssseeeerrrr____tttt is defined
  166.      in _s_i_g_f_p_e._h for convenience in programming.
  167.  
  168.      _a_b_o_r_t__a_c_t_i_o_n: If the handler encounters an unexpected condition or an
  169.      inconsistency, the flag _a_b_o_r_t__a_c_t_i_o_n indicates what action should be
  170.      taken.  Another option is for the user to specify that he is supplying
  171.      his own floating point exception handler as the default handler.  Legal
  172.      values are:
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))                                                          SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))
  203.  
  204.  
  205.  
  206.              _________________________________________________________
  207.                                            instruct the floating-
  208.                                            point-accelerator to cease
  209.                                            causing exceptions and
  210.                                            continue.  (i.e., disable
  211.                                            handling)
  212.               _TURN_OFF_HANDLER_ON_ERROR
  213.  
  214.  
  215.  
  216.  
  217.              _________________________________________________________
  218.                                            kill the process after
  219.                                            giving an error message
  220.                                            and calling a user-
  221.                                            supplied cleanup routine
  222.                                            if one is provided via the
  223.                                            abort_routine parameter.
  224.                          _ABORT_ON_ERROR
  225.  
  226.  
  227.  
  228.  
  229.  
  230.              _________________________________________________________
  231.                                            install the indicated user
  232.                                            routine as the handler
  233.                                            when such an error is
  234.                                            encountered.  Future
  235.                                            floating-point exceptions
  236.                                            will branch to the user-
  237.                                            routine. (see signal(2))
  238.                _REPLACE_HANDLER_ON_ERROR
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.              _________________________________________________________
  246.                                            install the indicated user
  247.                                            routine as the handler
  248.                                            immediately.  Future
  249.                                            floating-point exceptions
  250.                                            will branch to the user-
  251.                                            routine. (see signal(2))
  252.                            _USER_HANDLER
  253.  
  254.  
  255.  
  256.  
  257.  
  258.              _________________________________________________________
  259.              ||||||||||||||||||||||||||||
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.                                                                       ||||||||||||||||||||||||||||
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.      _a_b_o_r_t__r_o_u_t_i_n_e: When a fatal error (i.e., one described under _a_b_o_r_t__a_c_t_i_o_n
  315.      above) is encountered, _a_b_o_r_t__r_o_u_t_i_n_e is used as the address of a user
  316.      routine.
  317.  
  318.      If abort_action is _ABORT_ON_ERROR, and _a_b_o_r_t__r_o_u_t_i_n_e is valid, it is
  319.      called before aborting, and passed a pointer to the address of the
  320.      instruction causing the exception as its single argument.
  321.      In this case, the user's abort_routine should be defined as
  322.  
  323.      void abort_routine( ptr_to_pc )
  324.      unsigned int **ptr_to_pc;
  325.  
  326.      If _a_b_o_r_t__a_c_t_i_o_n is _REPLACE_HANDLER_ON_ERROR, and _a_b_o_r_t__r_o_u_t_i_n_e is valid,
  327.      it will be installed as the new handler.  In this case, _a_b_o_r_t__r_o_u_t_i_n_e
  328.      will be called immediately to handle the current exception.  (see
  329.      signal(2)) Pass a 0 (plain 0 is adequate) if you do not wish to provide
  330.      an _a_b_o_r_t__a_c_t_i_o_n routine.
  331.  
  332.      If _a_b_o_r_t__a_c_t_i_o_n is _USER_HANDLER, and _a_b_o_r_t__r_o_u_t_i_n_e is valid, it will be
  333.      installed immediately as the default floating point exception handler.
  334.  
  335.  
  336.  
  337.                                                                         PPPPaaaaggggeeee 4444
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344. SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))                                                          SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))
  345.  
  346.  
  347.  
  348.      If _a_b_o_r_t__r_o_u_t_i_n_e is to be invoked as a floating point exception handler,
  349.      the following prototype should be used (see <sigfpe.h>, <sys/signal.h>,
  350.      and signal(2)):
  351.  
  352.      int user_handler( sig, code, sc )
  353.      int sig, code;
  354.      struct sigcontext *sc;
  355.  
  356.      Typedef aaaabbbboooorrrrtttt____tttt is defined in _s_i_g_f_p_e._h for convenience in programming.
  357.  
  358.      Routine user_handler should return 0 to continue processing of the user's
  359.      code and a non-zero value to disconnect user_handler as the floating
  360.      point exception handler.  User_handler should not issue a call to
  361.      signal(), nor should it update the program counter in the sigcontext
  362.      area, because these actions are done in the routine which calls it.  A
  363.      user handler can determine which type of exception has occurred by
  364.      calling routine __fpe_trap_type().  This routine returns one of _UNDERFL,
  365.      _OVERFL, etc. as appropriate.
  366.  
  367.      Users can supply separate handlers for each exception type by making
  368.      multiple calls to handle_sigfpes.  See the third example below.
  369.      Similarly, trap handling for one or more exception types can be turned
  370.      off by or-ing the appropriate combination of masks in the second
  371.      parameter to handle_sigfpes.
  372.  
  373.      handle_sigfpes(OFF, 0, ...
  374.  
  375.      disables handling of all SIGFPE signals.
  376.  
  377. EEEEXXXXAAAAMMMMPPPPLLLLEEEESSSS OOOOFFFF CCCCAAAALLLLLLLLSSSS TTTTOOOO HHHHAAAANNNNDDDDLLLLEEEE____SSSSIIIIGGGGFFFFPPPPEEEESSSS
  378.           #include <sigfpe.h>
  379.  
  380.           /* call this during program startup
  381.              to set underflowing values to zero
  382.           */
  383.  
  384.           void  my_underflow_to_zero(void)
  385.           {
  386.             /* underflow to zero */
  387.  
  388.             sigfpe_[_UNDERFL].repls = _ZERO;
  389.  
  390.             /* only trap on underflow */
  391.  
  392.             handle_sigfpes(_ON, _EN_UNDERFL , 0, _ABORT_ON_ERROR, 0);
  393.           }
  394.  
  395.      The above example does one thing only: it sets up traps of underflow
  396.      which change the resulting value to zero.
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.                                                                         PPPPaaaaggggeeee 5555
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410. SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))                                                          SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))
  411.  
  412.  
  413.  
  414.      The following is a more complicated example.
  415.  
  416.           #include <limits.h> /* to get INT_MAX */
  417.           #include <sigfpe.h>
  418.  
  419.           main()
  420.           {
  421.             /* underflow to zero */
  422.  
  423.             sigfpe_[_UNDERFL].repls = _ZERO;
  424.  
  425.             /* substitute max float/double on overflow */
  426.  
  427.             sigfpe_[_OVERFL].repls=_MAX;
  428.  
  429.             /* trace first 5 exceptions of each kind */
  430.  
  431.             sigfpe_[_UNDERFL].trace=5;
  432.             sigfpe_[_OVERFL].trace =5;
  433.             sigfpe_[_DIVZERO].trace=5;
  434.             sigfpe_[_INVALID].trace=5;
  435.             sigfpe_[_INT_OVERFL].trace=5;
  436.  
  437.             /* counts at end */
  438.  
  439.             sigfpe_[_UNDERFL].count=INT_MAX;
  440.             sigfpe_[_OVERFL].count =INT_MAX;
  441.             sigfpe_[_DIVZERO].count=INT_MAX;
  442.             sigfpe_[_INVALID].count=INT_MAX;
  443.             sigfpe_[_INT_OVERFL].count=INT_MAX;
  444.  
  445.             /* abort after 100 */
  446.  
  447.             sigfpe_[_UNDERFL].abort=100;
  448.             sigfpe_[_OVERFL].abort =100;
  449.             sigfpe_[_INVALID].abort=100;
  450.             sigfpe_[_INT_OVERFL].abort=100;
  451.  
  452.             /* abort on first divide by zero */
  453.  
  454.             sigfpe_[_DIVZERO].abort=1;
  455.  
  456.  
  457.  
  458.             handle_sigfpes(_ON, _EN_UNDERFL| _EN_OVERFL|_EN_DIVZERO
  459.               | _EN_INVALID | _EN_INT_OVERFL, 0, _ABORT_ON_ERROR, 0);
  460.  
  461.             /* do the real application work here */
  462.           }
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.                                                                         PPPPaaaaggggeeee 6666
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476. SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))                                                          SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))
  477.  
  478.  
  479.  
  480.           The example counts all traps, traces the first five
  481.           exceptions of each kind, aborts on the first divide
  482.           by zero, or the 100th overflow.  It replaces zero for
  483.           underflows, max float/double for overflows, max integer
  484.           for integer overflows, and the default values for
  485.           divide by zero, invalid operands, and integer overflows.
  486.           The environment variable example below does the same thing.
  487.  
  488.           The last example shows how to enable different handlers
  489.           for  various exception types.
  490.  
  491.                #include <limits.h> /* to get INT_MAX */
  492.                #include <sigfpe.h>
  493.  
  494.                extern user_t              my_invalid_handler;
  495.  
  496.                main()
  497.                {
  498.                  /* counts at end */
  499.  
  500.                  sigfpe_[_UNDERFL].count=INT_MAX;
  501.                  sigfpe_[_OVERFL].count =INT_MAX;
  502.                  sigfpe_[_DIVZERO].count=INT_MAX;
  503.                  sigfpe_[_INVALID].count=INT_MAX;
  504.                  sigfpe_[_INT_OVERFL].count=INT_MAX;
  505.  
  506.                  /* enable trapping on overflow, using libfpe's trap handler */
  507.  
  508.                  handle_sigfpes(_ON, _EN_OVERFL, 0, 0, 0);
  509.  
  510.                  /* enable trapping on invalid, using user's own trap handler */
  511.  
  512.                  handle_sigfpes(_ON, _EN_INVALID, my_invalid_handler, 0, 0);
  513.  
  514.                  /* do the real application work here */
  515.  
  516.                  ....
  517.  
  518.                  /* turn off trapping of overflows */
  519.  
  520.                  handle_sigfpes(_OFF, _EN_OVERFL, 0, 0, 0);
  521.  
  522.                  ....
  523.  
  524.                  /* turn off all handling of SIGFPE signals */
  525.  
  526.                  handle_sigfpes(_OFF, 0, 0, 0, 0);
  527.  
  528.                  ....
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.                                                                         PPPPaaaaggggeeee 7777
  536.  
  537.  
  538.  
  539.  
  540.  
  541.  
  542. SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))                                                          SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))
  543.  
  544.  
  545.  
  546. TTTTHHHHEEEE EEEENNNNVVVVIIIIRRRROOOONNNNMMMMEEEENNNNTTTT VVVVAAAARRRRIIIIAAAABBBBLLLLEEEE TTTTRRRRAAAAPPPP____FFFFPPPPEEEE
  547.      If the code has been linked with lllliiiibbbbffffppppeeee....ssssoooo the runtime startup routine
  548.      will check for the environment variable "TTTTRRRRAAAAPPPP____FFFFPPPPEEEE".  The string read as
  549.      the value of TTTTRRRRAAAAPPPP____FFFFPPPPEEEE will be interpreted and hhhhaaaannnnddddlllleeee____ssssiiiiggggffffppppeeeessss will be
  550.      called with the resulting values.
  551.  
  552.      TTTTRRRRAAAAPPPP____FFFFPPPPEEEE is read in upper case letters only. The string assigned to
  553.      TTTTRRRRAAAAPPPP____FFFFPPPPEEEE may be in upper case or lower case.  TTTTRRRRAAAAPPPP____FFFFPPPPEEEE can take one of
  554.      two forms: either a global value, or a list of individual items.
  555.  
  556.      global values:
  557.  
  558.                                 Execute the program with no
  559.                                 trap handling enabled.  Same as
  560.                                 TTTTRRRRAAAAPPPP____FFFFPPPPEEEE undefined.  Same as
  561.                                 linking without libfpe.so
  562.                     "" or OFF
  563.  
  564.  
  565.  
  566.                            ON   Same as TTTTRRRRAAAAPPPP____FFFFPPPPEEEE====""""AAAALLLLLLLL====DDDDEEEEFFFFAAAAUUUULLLLTTTT"""".
  567.      Alternately, replacement values and actions may be specified for each of
  568.      the possible trap types individually.  This is accomplished by setting
  569.      the environment variable as follows:
  570.  
  571.      setenv TTTTRRRRAAAAPPPP____FFFFPPPPEEEE "item;item;item...."
  572.  
  573.      an item can be one of the following:
  574.  
  575.                                        Where traptype defines the
  576.                                        specific floating point
  577.                                        exception to enable, and
  578.                                        statuslist defines the
  579.                                        list of actions upon
  580.                                        encountering the trap.
  581.                  traptype=statuslist
  582.  
  583.  
  584.  
  585.  
  586.  
  587.                                        Confirm the parsing of the
  588.                                        environment variable, and
  589.                                        the trap actions.
  590.                                DEBUG
  591.  
  592.  
  593.      Traptype can be one of the following literal strings:
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609.  
  610.  
  611.  
  612.  
  613.                                                                         PPPPaaaaggggeeee 8888
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620. SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))                                                          SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))
  621.  
  622.  
  623.  
  624.                               UNDERFL   underflow
  625.                                OVERFL   overflow
  626.                               DIVZERO   divide by zero
  627.                               INVALID   invalid operand
  628.                            INT_OVERFL   integer overflow
  629.                                   ALL   all of the above
  630.      Statuslist is a list separated by commas.  It contains an optional
  631.      symbolic replacement value, and an optional list of actions.
  632.  
  633.      symbolic replacement values:
  634.  
  635.                                    DEFAULT   Do not override the predefined default values.
  636. IEEE    Maps to integer code _APPROPRIATE.
  637.                                APPROPRIATE   Maps to integer code _APPROPRIATE.
  638.                                       ZERO   Maps to integer code _ZERO.
  639.                                 FLUSH_ZERO   Maps to integer code _FLUSH_ZERO (R4000 and later processors).
  640.                                 FLUSH_ZERO   Maps to integer code _ZERO (other processors).
  641.                                        MIN   Maps to integer code _MIN.
  642.                                        MAX   Maps to integer code _MAX.
  643.                                        INF   Maps to integer code _INF.
  644.                                        NAN   Maps to integer code _NAN.
  645.      All actions take an optional integer in parentheses:
  646.  
  647.      Note: for any traps that have an action and no specified replacement
  648.      value, the DEFAULT replacement value will be used.
  649.  
  650.                                   A count of the trap type
  651.                                   will be printed to stderr
  652.                                   every nth trap, and at the
  653.                                   end of the program.
  654.                                   Default is INT_MAX.
  655.                        COUNT(n)
  656.  
  657.  
  658.  
  659.  
  660.  
  661.                                   Core dump and abort the
  662.                                   program upon encountering
  663.                                   the nth trap.  Default is
  664.                                   1.
  665.                        ABORT(n)
  666.  
  667.  
  668.  
  669.  
  670.                                   Exit program upon
  671.                                   encountering the nth trap.
  672.                                   Default is 1.
  673.                         EXIT(n)
  674.  
  675.  
  676.  
  677.                                   If a trap is encountered,
  678.                                   Print a stack trace to
  679.                                   stderr up to n times.
  680.                                   Default is 10.
  681.                        TRACE(n)
  682.  
  683.  
  684.  
  685. EEEEXXXXAAAAMMMMPPPPLLLLEEEE OOOOFFFF TTTTRRRRAAAAPPPP____FFFFPPPPEEEE
  686.      setenv TTTTRRRRAAAAPPPP____FFFFPPPPEEEE "ALL=COUNT; UNDERFL=ZERO; OVERFL=IEEE,TRACE(5),
  687.      ABORT(100); DIVZERO=ABORT"
  688.  
  689.  
  690.  
  691.                                                                         PPPPaaaaggggeeee 9999
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698. SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))                                                          SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))
  699.  
  700.  
  701.  
  702.      The example counts all traps, traces the first five overflows, aborts on
  703.      the first divide by zero, or the 100th overflow. It Replaces zero for
  704.      underflows, the "appropriate" value for overflows, and the default values
  705.      for divide by zero, invalid operands, and integer overflows.
  706.  
  707. WWWWHHHHEEEENNNN AAAANNNN EEEEXXXXCCCCEEEEPPPPTTTTIIIIOOOONNNN IIIISSSS EEEENNNNCCCCOOOOUUUUNNNNTTTTEEEERRRREEEEDDDD
  708.      When an exception is encountered, the handler examines the instruction
  709.      causing the exception, the state of the floating-point accelerator and
  710.      the sigfpe structure to determine the correct action to take, and the
  711.      program is continued.  In the cases of ____UUUUNNNNDDDDEEEERRRRFFFFLLLL,,,, ____OOOOVVVVEEEERRRRFFFFLLLL,,,, ____DDDDIIIIVVVVZZZZEEEERRRROOOO,,,,
  712.      ____IIIINNNNTTTT____OOOOVVVVEEEERRRRFFFFLLLL,,,, and some instances of ____IIIINNNNVVVVAAAALLLLIIIIDDDD,,,, an appropriate value is
  713.      substituted for the result of the operation, and the instruction which
  714.      caused the exception is skipped.  For most exceptions arising due to an
  715.      invalid operand (____IIIINNNNVVVVAAAALLLLIIIIDDDD exceptions), more meaningful behavior may be
  716.      obtained by replacing an erroneous operand.  For these conditions, the
  717.      operand is replaced, and the instruction re-issued.
  718.  
  719.      _s_i_g_f_p_e: For each enabled exception, the sigfpe structure contains the
  720.      fields: repls, count, trace, exit and abort. For each enabled exception
  721.      <p>, and each non-zero entry <n> in the sigfpe structure, the trap
  722.      handler will take the following actions:
  723.      ccccoooouuuunnnntttt:::: A count of all enabled traps will be printed to stderr at the end
  724.      of execution of the program , and every at <n>th exception <p>.
  725.      ttttrrrraaaacccceeee:::: A dbx stack trace will be printed to stderr every exception <p>,
  726.      up to <n> times.  You must have dbx installed on your system to use this
  727.      option.
  728.      aaaabbbboooorrrrtttt:::: Core dump and abort program upon encountering the <n>th exception
  729.      <p>. The abort option takes precedence over the exit option.
  730.      eeeexxxxiiiitttt:::: Exit program upon encountering the <n>th  exception <p>.
  731.      rrrreeeeppppllllssss:::: Each of the exceptions ____UUUUNNNNDDDDEEEERRRRFFFFLLLL, ____OOOOVVVVEEEERRRRFFFFLLLL, ____DDDDIIIIVVVVZZZZEEEERRRROOOO, and
  732.      ____IIIINNNNTTTT____OOOOVVVVEEEERRRRFFFFLLLL has an associated default value which is used as the result
  733.      of the operation causing the exception.  These default values may be
  734.      overridden by initializing this integer value.  This value is interpreted
  735.      as an integer code used to select one of a set of replacement values, or
  736.      to indicate that the routine _u_s_e_r__r_o_u_t_i_n_e is responsible for setting the
  737.      value.  These integer codes are listed below:
  738.  
  739.  
  740.  
  741.  
  742.  
  743.  
  744.  
  745.  
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755.  
  756.  
  757.                                                                        PPPPaaaaggggeeee 11110000
  758.  
  759.  
  760.  
  761.  
  762.  
  763.  
  764. SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))                                                          SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))
  765.  
  766.  
  767.  
  768.                           _ZERO   use zero as the replacement value
  769.  
  770.                                   Set the flush_zero bit in the
  771.                                   Control Status register.  This
  772.                                   causes a flush to zero without
  773.                                   invoking the trap handler.  Works
  774.                                   only for underflow traps on the
  775.                                   R4000 and later processors.
  776.                                   Works like _ZERO for the R3000.
  777.                     _FLUSH_ZERO
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.                                   use the appropriately-typed
  786.                                   minimum value as the replacement.
  787.                                   (i.e., the smallest number which
  788.                                   is representable in that format
  789.                                   _w_i_t_h_o_u_t denormalizing)
  790.                            _MIN
  791.  
  792.  
  793.  
  794.  
  795.  
  796.                                   use the appropriately-typed
  797.                                   maximum value as the replacement
  798.                            _MAX
  799.  
  800.  
  801.                                   use the appropriately-typed value
  802.                                   for infinity as the replacement
  803.                            _INF
  804.  
  805.  
  806.                                   use the appropriately-typed value
  807.                                   for not-a-number as the
  808.                                   replacement.  (A _q_u_i_e_t not-a-
  809.                                   number is used.)
  810.                            _NAN
  811.  
  812.  
  813.  
  814.  
  815.                                   use IEEE standard results as the
  816.                                   return result for ____UUUUNNNNDDDDEEEERRRRFFFFLLLL,
  817.                                   ____OOOOVVVVEEEERRRRFFFFLLLL, ____DDDDIIIIVVVVZZZZEEEERRRROOOO, and ____IIIINNNNVVVVAAAALLLLIIIIDDDD
  818.                                   exceptions.
  819.                    _APPROPRIATE
  820.  
  821.  
  822.  
  823.  
  824.                                   invoke the routine _u_s_e_r__r_o_u_t_i_n_e
  825.                                   (see note) to set the value of
  826.                                   the operation.  If this is the
  827.                                   code used for ____IIIINNNNVVVVAAAALLLLIIIIDDDD
  828.                                   exceptions, all such exceptions
  829.                                   will defer to _u_s_e_r__r_o_u_t_i_n_e to set
  830.                                   their value.  In this case,
  831.                                   _i_n_v_a_l_i_d_o_p__r_e_s_u_l_t_s_ and
  832.                                   _i_n_v_a_l_i_d_o_p__o_p_e_r_a_n_d_s_ will be
  833.                                   ignored.
  834.                _USER_DETERMINED
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.                                   use the negative of the argument
  846.                                   as the replacement operand.  This
  847.                                   code is valid only for the cases
  848.                                   _SQRT_NEG_X and _RSQRT_NEG_X (see
  849.                                   below).
  850.                            _NEG
  851.  
  852.  
  853.  
  854.  
  855.      The default values used as the results of floating-point exceptions are:
  856.  
  857.  
  858.  
  859.  
  860.                                                                        PPPPaaaaggggeeee 11111111
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  
  867. SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))                                                          SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))
  868.  
  869.  
  870.  
  871.              ________________________________________________________
  872.                              values for _s_i_g_f_p_e_._r_e_p_l_s
  873.                    element
  874.                #   mnemonic      exception condition   default value
  875.               _______________________________________________________
  876.                0   (none)        (ignored)
  877.                1   _UNDERFL      underflow             _APPROPRIATE
  878.                2   _OVERFL       overflow              _APPROPRIATE
  879.                3   _DIVZERO      divide-by-zero        _APPROPRIATE
  880.                4   _INVALID      invalid operand       (use tables)
  881.                5   _INT_OVERFL   integer overflow      _MAX
  882.               _______________________________________________________
  883.               |||||||||||
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.                                ||||||||||
  894.  
  895.  
  896.  
  897.  
  898.  
  899.  
  900.  
  901.                                                      ||||||||||
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908.  
  909.                                                                      |||||||||||
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.      The default values for _UNDERFL, _OVERFL, _DIVZERO, and _INVALID
  921.      exceptions will produce the same results as if the instruction were re-
  922.      issued with the original operand(s) and floating-point traps disabled.
  923.  
  924.  
  925.      Valid values for sigfpe_[_INT_OVERFL].repls are:  _MAX, APPROPRIATE,
  926.      _ZERO, and _USER_DETERMINED, the default being _MAX.
  927.  
  928.  
  929.      For ____IIIINNNNVVVVAAAALLLLIIIIDDDD exceptions, the correct action may be either to set the
  930.      result and skip the instruction, or to replace an operand and retry the
  931.      instruction. There are four cases in which the result is set.  The array
  932.      named _i_n_v_a_l_i_d_o_p__r_e_s_u_l_t_s_ is consulted for replacement codes for these
  933.      cases:
  934.  
  935.            ____________________________________________________________
  936.                                array _i_n_v_a_l_i_d_o_p__r_e_s_u_l_t_s_
  937.                 element                      exception
  938.             #   mnemonic                     condition   default value
  939.            ____________________________________________________________
  940.             0   (none)                       (ignored)
  941.             1   _MAGNITUDE_INF_SUBTRACTION   oo - oo     _NAN
  942.             2   _ZERO_TIMES_INF              0 * oo      _NAN
  943.             3   _ZERO_DIV_ZERO               0/0         _NAN
  944.             4   _INF_DIV_INF                 oo / oo     _NAN
  945.            ____________________________________________________________
  946.            ||||||||||
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954.  
  955.                                            |||||||||
  956.  
  957.  
  958.  
  959.  
  960.  
  961.  
  962.                                                        |||||||||
  963.  
  964.  
  965.  
  966.  
  967.  
  968.  
  969.                                                                        ||||||||||
  970.  
  971.  
  972.  
  973.  
  974.  
  975.  
  976.  
  977.  
  978.  
  979.      There are ten cases in which an offending operand is replaced. An array
  980.      named _i_n_v_a_l_i_d_o_p__o_p_e_r_a_n_d_s_ is consulted for user-initialized codes for
  981.      these cases.  Cases 8 through 11 are valid only for the mips3 and later
  982.      architectures.  Array _i_n_v_a_l_i_d_o_p__o_p_e_r_a_n_d_s_ has only 8 entries (0-7) for
  983.      the earlier processors.  Each element governs the following cases:
  984.  
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.                                                                        PPPPaaaaggggeeee 11112222
  994.  
  995.  
  996.  
  997.  
  998.  
  999.  
  1000. SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))                                                          SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))
  1001.  
  1002.  
  1003.  
  1004.       _______________________________________________________________________
  1005.                              array _i_n_v_a_l_i_d_o_p__o_p_e_r_a_n_d_s_
  1006.              element
  1007.        #    mnemonic         exception condition              default value
  1008.       _______________________________________________________________________
  1009.        0    (none)           (ignored)
  1010.        1    _SQRT_NEG_X      sqrt(-x)                         reissue
  1011.        2    (unused)         (ignored)                        with original
  1012.                              conversion to integer caused
  1013.                              target to overflow
  1014.        3    _CVTW_OVERFL                                      operands and
  1015.  
  1016.        4    _CVTW_NAN        conversion of NaN to int         floating point
  1017.        5    _CVTW_INF        conversion of oo to int          traps disabled
  1018.        6    _UNORDERED_CMP   comparison to NaN
  1019.                              operand was Signaling Nan
  1020.        7    _SNAN_OP
  1021.                              conversion to long long caused
  1022.                              target to overflow
  1023.        8    _CVTL_OVERFL
  1024.  
  1025.        9    _CVTL_NAN        conversion of NaN to long long
  1026.        10   _CVTL_INF        conversion of oo to long long
  1027.        11   _RSQRT_NEG_X     reciprocal sqrt(-x)
  1028.       _______________________________________________________________________
  1029.       |||||||||||||||||||
  1030.  
  1031.  
  1032.  
  1033.  
  1034.  
  1035.  
  1036.  
  1037.  
  1038.  
  1039.  
  1040.  
  1041.  
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.                            ||||||||||||||||||
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.  
  1061.  
  1062.  
  1063.                                                             ||||||||||||||||||
  1064.  
  1065.  
  1066.  
  1067.  
  1068.  
  1069.  
  1070.  
  1071.  
  1072.  
  1073.  
  1074.  
  1075.  
  1076.  
  1077.  
  1078.  
  1079.                                                                              |||||||||||||||||||
  1080.  
  1081.  
  1082.  
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  
  1088.  
  1089.  
  1090.  
  1091.  
  1092.  
  1093.  
  1094.  
  1095.  
  1096.  
  1097.  
  1098.  
  1099. NNNNOOOOTTTTEEEE
  1100.      UUUUsssseeee ooooffff _u_s_e_r__r_o_u_t_i_n_e ttttoooo sssseeeetttt vvvvaaaalllluuuueeeessss
  1101.      If the integer code defining the replacement value for a particular
  1102.      exception condition is _USER_DETERMINED, the user-supplied routine
  1103.      _u_s_e_r__r_o_u_t_i_n_e is called:
  1104.                  ((((****uuuusssseeeerrrr____rrrroooouuuuttttiiiinnnneeee))))((((eeeexxxxcccceeeeppppttttiiiioooonnnn____ppppaaaarrrraaaammmmeeeetttteeeerrrrssss,,,, vvvvaaaalllluuuueeee))));;;;
  1105.      _v_a_l_u_e is an array of two _i_n_ts into which _u_s_e_r__r_o_u_t_i_n_e should store the
  1106.      replacement value.  If an operand is being replaced, _v_a_l_u_e has a copy of
  1107.      the current operand.
  1108.  
  1109.  
  1110.      _e_x_c_e_p_t_i_o_n__p_a_r_a_m_e_t_e_r_s is an array of five _u_n_s_i_g_n_e_d _i_n_ts which describe the
  1111.      exception condition:
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127.  
  1128.  
  1129.  
  1130.                                                                        PPPPaaaaggggeeee 11113333
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137. SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))                                                          SSSSIIIIGGGGFFFFPPPPEEEE((((3333CCCC))))
  1138.  
  1139.  
  1140.  
  1141.           ______________________________________________________________
  1142.                             array _e_x_c_e_p_t_i_o_n__p_a_r_a_m_e_t_e_r_s
  1143.                  element
  1144.            #   mnemonic          description
  1145.           ______________________________________________________________
  1146.            0   _EXCEPTION_TYPE   the exception type (_DIVZERO, etc).
  1147.                                  value = _SET_RESULT if result is
  1148.                                  being set.  value = _REPL_OPERAND
  1149.                                  if an operand is being replaced.
  1150.                                  This element is meaningful only if
  1151.                                  the exception type is ____IIIINNNNVVVVAAAALLLLIIIIDDDD.
  1152.            1   _INVALID_ACTION
  1153.  
  1154.  
  1155.  
  1156.  
  1157.                                  This element is meaningful only if
  1158.                                  the exception type is ____IIIINNNNVVVVAAAALLLLIIIIDDDD.  It
  1159.                                  is the index corresponding to the
  1160.                                  particular conditions giving rise
  1161.                                  to the exception.  In conjunction
  1162.                                  with element 1, this value uniquely
  1163.                                  determines the exception condition.
  1164.                                  (e.g., if _INVALID_ACTION is
  1165.                                  _SET_RESULT and _INVALID_TYPE is 2,
  1166.                                  the ____IIIINNNNVVVVAAAALLLLIIIIDDDD exception is due to
  1167.                                  _ZERO_TIMES_INF.)
  1168.            2   _INVALID_TYPE
  1169.  
  1170.  
  1171.  
  1172.  
  1173.  
  1174.  
  1175.  
  1176.  
  1177.  
  1178.  
  1179.                                  the type of the replacement value -
  1180.                                  either _SINGLE, _DOUBLE, _WORD, or
  1181.                                  _LONGWORD
  1182.            3   _VALUE_TYPE
  1183.  
  1184.  
  1185.                                  the suggested sign _u_s_e_r__r_o_u_t_i_n_e
  1186.                                  should use for the replacement
  1187.                                  value - either _POSITIVE or
  1188.                                  _NEGATIVE.
  1189.            4   _VALUE_SIGN
  1190.  
  1191.  
  1192.  
  1193.           ______________________________________________________________
  1194.           |||||||||||||||||||||||||||||
  1195.  
  1196.  
  1197.  
  1198.  
  1199.  
  1200.  
  1201.  
  1202.  
  1203.  
  1204.  
  1205.  
  1206.  
  1207.  
  1208.  
  1209.  
  1210.  
  1211.  
  1212.  
  1213.  
  1214.  
  1215.  
  1216.  
  1217.  
  1218.  
  1219.  
  1220.  
  1221.  
  1222.                                ||||||||||||||||||||||||||||
  1223.  
  1224.  
  1225.  
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.                                                                         |||||||||||||||||||||||||||||
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260.  
  1261.  
  1262.  
  1263.  
  1264.  
  1265.  
  1266.  
  1267.  
  1268.  
  1269.  
  1270.  
  1271.  
  1272.  
  1273.  
  1274.  
  1275.  
  1276.  
  1277.  
  1278. NNNNOOOOTTTTEEEESSSS FFFFOOOORRRR RRRR8888000000000000
  1279.      Due to the nature of parallel operations on the R8000 processor, it is
  1280.      not possible to determine the true value of the program counter when a
  1281.      floating point exception occurs.  Therefore, on that processor, libfpe.so
  1282.      will not update either operands or results when floating point exceptions
  1283.      occur.  Another anomaly on this processor is that counts of floating
  1284.      point exceptions for a particular program may vary from run to run.
  1285.  
  1286.      When the R8000 processor executes in precise exception mode, libfpe
  1287.      behaves as it does on other processors, i.e. operands and results can be
  1288.      updated when floating point exceptions occur.  See fpmode(1).
  1289.  
  1290. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  1291.      signal(3c), fsigfpe(3f), fpc(3c), get_fpc_csr(3c), set_fpc_csr(3c)
  1292.  
  1293.  
  1294.  
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.                                                                        PPPPaaaaggggeeee 11114444
  1303.  
  1304.  
  1305.  
  1306.